/**
 * example 1
 * @param {*} success
 */
// function callSteven(success) {
//   console.log(`Calling Steven...`);
//   setTimeout(() => {
//     if (success) {
//       connected();
//     } else {
//       disconnected();
//     }
//   }, 2000);
// }

// function connected() {
//   console.log(`Steven picked up the phone.`);
// }

// function disconnected() {
//   console.log(`Steven rejected the call.`);
// }

// callSteven(false);

/**
 * example 2
 * @param {*} success
 * @param {*} connectedCallback
 * @param {*} disconnectedCallback
 */
// function callSteven(success, connectedCallback, disconnectedCallback) {
//   console.log(`Calling Steven`);
//   setTimeout(() => {
//     if (success) {
//       typeof connectedCallback === "function" && connectedCallback();
//     } else {
//       typeof disconnectedCallback === "function" && disconnectedCallback();
//     }
//   }, 2000);
// }

// callSteven(
//   true,
//   () => {
//     console.log(`Steven picked up the phone.`);
//   },
//   () => {
//     console.log(`Steven rejected the call.`);
//   }
// );

/**
 * example 3
 * @param {k} success
 * @returns
 */
// function callSteven(success) {
//   return new Promise((resolve, reject) => {
//     console.log(`Calling Steven...`);
//     setTimeout(() => {
//       if (success) {
//         resolve();
//       } else {
//         reject();
//       }
//     }, 2000);
//   });
// }

// callSteven(false)
//   .then(() => {
//     console.log(`Steven picked up the phone`);
//   })
//   .catch(() => {
//     console.log(`Steven rejected the call`);
//   });

function callSteven(success) {
  return new Promise((resolve, reject) => {
    console.log(`Calling Steven...`);
    setTimeout(() => {
      if (success) {
        resolve();
      } else {
        reject();
      }
    }, 2000);
  });
}

// execu: 1
// async function action() {
//   try {
//     await callSteven(false);
//     console.log(`Steven picked up the phone`);
//   } catch (e) {
//     console.log(`Steven rejected the call`);
//   }
// }
// action();

// execu: 2
(async () => {
  try {
    await callSteven(false);
    console.log(`Steven picked up the phone`);
  } catch (e) {
    console.log(`Steven rejected the call`);
  }
})();
